import ApiClient from '@/api/apiClient';

import type { RequestBody } from 'alova';

/**
 * 位置树结构实体
 */
export interface LocationTreeEntity {
  /**
   * 地址
   */
  address: string;
  /**
   * 子节点数据
   */
  children?: LocationTreeEntity[];
  /**
   * 关联的组态图ID
   */
  configDiagramId?: number;
  /**
   * 关联的组态图名称
   */
  configDiagramName?: string;
  /**
   * 绑定的设备完整信息
   */
  devices?: unknown[];
  /**
   * 绑定的设备ID数组
   */
  deviceIds?: string[];
  /**
   * 绑定的摄像头ID数组
   */
  cameraIds?: string[];
  /**
   * 设备分组ID
   */
  groupId?: string;
  /**
   * 主键ID
   */
  id: string;
  /**
   * 纬度
   */
  lat: number;
  /**
   * 经度
   */
  lng: number;
  /**
   * 名称
   */
  name: string;
  /**
   * 为0或者为空表示城市
   */
  parentId: number;
  /**排序 */
  sort?: number;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 类型0:城市 1:site 2:位置节点
   */
  type?: number;
  [property: string]: unknown;
}

/** 获取设备位置树 */
export const deviceLocationGetTree = (data?: RequestBody) => {
  return ApiClient.Get<LocationTreeEntity[]>('/manager/bizLocationInfo/getTree', {
    params: data,
    meta: { auth: true },
  });
};

/** 保存更新设备位置树 */
export const deviceLocationSaveOrUpdate = (data: RequestBody) => {
  return ApiClient.Post<LocationTreeEntity[]>('/manager/bizLocationInfo/saveOrUpdate', data, {
    meta: { auth: true },
  });
};

/** 删除设置位置 */
export const deviceLocationDelete = (data: Merged<RequestBody, { id: string }>) => {
  return ApiClient.Get<LocationTreeEntity[]>(`/manager/bizLocationInfo/del/${data.id}`, {
    meta: { auth: true },
  });
};

/** 导出设备位置 */
export const deviceLocationExport = () => {
  return ApiClient.DownloadArrayBuffer(`/manager/bizLocationInfo/exportLocation`, {
    meta: { auth: true },
  });
};

/** 导入设备位置 */
export const deviceLocationImport = (data: RequestBody, parentId: number) => {
  return ApiClient.Post(`/manager/bizLocationInfo/importLocation?parentId=${parentId}`, data, {
    meta: { auth: true },
  });
};

/** 设备解绑位置 */
export const deviceLocationUnbind = (deviceId: string) => {
  return ApiClient.Get(`/manager/device/unBindingDeviceLocation/${deviceId}`, {
    meta: { auth: true },
  });
};

// recursive 传1 表示递归子节点绑定的设备
/** 设备位置获取绑定的设备列表 */
export const deviceLocationGetBindDevice = (data: Merged<RequestBody, { locationId: string }>) => {
  return ApiClient.Get(`/manager/bizLocationInfo/getDeviceInfosByLocationId`, {
    params: data,
    meta: { auth: true },
  });
};

/** 批量删除设备位置 */
export const deviceLocationBatchDelete = (data: Merged<RequestBody, { ids: string[] }>) => {
  return ApiClient.Post(`/manager/bizLocationInfo/batchRemoveById`, data.ids, {
    meta: { auth: true },
  });
};
